/*
XPTracker - Alternative Agile Tracking Tool
Copyright (C) 2006-2009  Stephen Starkey

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/
package org.xptracker.port;

import org.apache.commons.lang.StringUtils;
import org.xptracker.domain.Story;
import org.xptracker.domain.StoryCategory;
import org.xptracker.persistence.PersistenceManager;

import java.util.Collection;

public class StoryCategoriesType<T> extends SimpleType<T> {

  public StoryCategoriesType() {
  }

  public StoryCategoriesType(String fieldPrefix) {
    super(fieldPrefix);
  }


  public String exportValue(T t) throws RuntimeException {
    Collection<StoryCategory> categories = (Collection<StoryCategory>) super.getExportValue(t);
    StringBuilder builder = new StringBuilder();
    String delim = "";
    for (StoryCategory cat : categories) {
      builder.append(delim).append(cat.getName());
      delim = ",";
    }
    return builder.toString();
  }

  public void setImportValue(T t, String value, PersistenceManager.UpdateReceiver receiver) throws RuntimeException {
    if (StringUtils.isBlank(value)) {
      return;
    }
    String[] cats = value.split(",");
    //todo this should not be here, but StoryCategories can only be on stories
    final Story story = (Story) t;
    for (final String name : cats) {
      StoryCategory cat = getDomain().loadCategory(name);
      if(cat == null) {
        cat = new StoryCategory(name);
        receiver.insert(cat);
      }
      story.getCategories().add(cat);
    }
  }
}
